home *** CD-ROM | disk | FTP | other *** search
/ The Games Machine 80 / XENIATGM80.iso / Goodies / Blood 2 / Source / data.z / MenuJoystick.cpp < prev    next >
C/C++ Source or Header  |  1999-04-02  |  7KB  |  254 lines

  1. // MenuJoystick.cpp: implementation of the CMenuJoystick class.
  2. //
  3. //////////////////////////////////////////////////////////////////////
  4.  
  5. #include "MainMenus.h"
  6. #include "MenuJoystick.h"
  7. #include "MenuJoystickAxis.h"
  8. #include "BloodClientShell.h"
  9. #include "ClientRes.h"
  10.  
  11. #define JOYSTICKAXISX 0
  12. #define JOYSTICKAXISY 1
  13.  
  14.  
  15. //////////////////////////////////////////////////////////////////////
  16. // Construction/Destruction
  17. //////////////////////////////////////////////////////////////////////
  18.  
  19. CMenuJoystick::CMenuJoystick()
  20. {
  21.     m_bUseJoystick=DFALSE;    
  22.     m_bUsePovHat=DFALSE;
  23.  
  24.     m_pUsePovHat=NULL;
  25.  
  26.     m_pAxisTurn=new CMenuJoystickAxisTurn;
  27.     m_pAxisLook=new CMenuJoystickAxisLook;    
  28.     m_pAxisStrafe=new CMenuJoystickAxisStrafe;
  29.     m_pAxisMove=new CMenuJoystickAxisMove;    
  30. }
  31.  
  32. CMenuJoystick::~CMenuJoystick()
  33. {
  34.     if (m_pAxisTurn)
  35.     {
  36.         delete m_pAxisTurn;
  37.         m_pAxisTurn=DNULL;
  38.     }
  39.     if (m_pAxisLook)
  40.     {
  41.         delete m_pAxisLook;
  42.         m_pAxisLook=DNULL;
  43.     }
  44.     if (m_pAxisStrafe)
  45.     {
  46.         delete m_pAxisStrafe;
  47.         m_pAxisStrafe=DNULL;
  48.     }
  49.     if (m_pAxisMove)
  50.     {
  51.         delete m_pAxisMove;
  52.         m_pAxisMove=DNULL;
  53.     }    
  54. }
  55.  
  56. // Build the menu
  57. void CMenuJoystick::Build()
  58. {
  59.     // Make sure to call the base class
  60.     CMenuBase::Build();    
  61.  
  62. //    m_pClientDE->CPrint("CMenuJoystick::Build called!"); // BLB TEMP
  63.     
  64.     CreateTitle("interface\\mainmenus\\options.pcx", IDS_MENU_TITLE_OPTIONS, m_pMainMenus->GetTitlePos());        
  65.     SetOptionPos(m_pMainMenus->GetOptionsPos());
  66.     SetItemSpacing(5);
  67.     SetScrollWrap(DFALSE);    
  68.     UseArrows(DTRUE, 300);
  69.  
  70.     m_bUseJoystick=g_pBloodClientShell->IsUseJoystick();
  71.  
  72.     // check if the joystick has been disabled by the advanced menu console variables
  73.     HCONSOLEVAR hVar = m_pClientDE->GetConsoleVar( "joystickdisable");
  74.     if (hVar != NULL) 
  75.     {
  76.         if (m_pClientDE->GetVarValueFloat(hVar) == 1) 
  77.         {
  78.             m_bUseJoystick = DFALSE;
  79.             g_pBloodClientShell->SetUseJoystick(FALSE);
  80.         }
  81.     }
  82.  
  83.     // read in the JOYSTICK.CFG file
  84.     m_pClientDE->ReadConfigFile ("joystick.cfg");
  85.  
  86.     UpdateData(DFALSE);
  87.     BuildAxisMenus();    
  88.  
  89.     // Update the enable/disable status of the controls
  90.     UpdateEnable();
  91. }
  92.  
  93. // Build the axis menus
  94. void CMenuJoystick::BuildAxisMenus()
  95. {
  96.     // Add the menu options
  97.     AddOnOffOption(IDS_MENU_JOYSTICK_USE, m_pMainMenus->GetSmallFont(), 100, &m_bUseJoystick);
  98.  
  99.     CLTGUITextItemCtrl *pTitleCtrl=DNULL;
  100.  
  101.     // Turn menu options
  102.     pTitleCtrl=AddTextItemOption(IDS_MENU_JOYSTICK_TURNLEFTRIGHTAXIS, 0, m_pMainMenus->GetSmallFont());
  103.     pTitleCtrl->SetColor(SETRGB(220,190,170), SETRGB(125,30,0), SETRGB(0,255,255));
  104.     if (pTitleCtrl) pTitleCtrl->Enable(DFALSE);
  105.  
  106.     m_pAxisTurn->Build(m_pClientDE, this);    
  107.  
  108.     // Look menu options
  109.     pTitleCtrl=AddTextItemOption(IDS_MENU_JOYSTICK_LOOKUPDOWNAXIS, 0, m_pMainMenus->GetSmallFont());
  110.     pTitleCtrl->SetColor(SETRGB(220,190,170), SETRGB(125,30,0), SETRGB(0,255,255));
  111.     if (pTitleCtrl) pTitleCtrl->Enable(DFALSE);
  112.  
  113.     m_pAxisLook->Build(m_pClientDE, this);
  114.  
  115.     // Move menu options
  116.     pTitleCtrl=AddTextItemOption(IDS_MENU_JOYSTICK_MOVEFORWARDBACKWARDAXIS, 0, m_pMainMenus->GetSmallFont());
  117.     pTitleCtrl->SetColor(SETRGB(220,190,170), SETRGB(125,30,0), SETRGB(0,255,255));
  118.     if (pTitleCtrl) pTitleCtrl->Enable(DFALSE);
  119.  
  120.     m_pAxisMove->Build(m_pClientDE, this);
  121.  
  122.     // Strafe menu options
  123.     pTitleCtrl=AddTextItemOption(IDS_MENU_JOYSTICK_STRAFELEFTRIGHTAXIS, 0, m_pMainMenus->GetSmallFont());
  124.     pTitleCtrl->SetColor(SETRGB(220,190,170), SETRGB(125,30,0), SETRGB(0,255,255));
  125.     if (pTitleCtrl) pTitleCtrl->Enable(DFALSE);
  126.  
  127.     m_pAxisStrafe->Build(m_pClientDE, this);
  128.  
  129.     m_pUsePovHat = AddOnOffOption(IDS_MENU_JOYSTICK_HATONOFF, m_pMainMenus->GetSmallFont(), 100, &m_bUsePovHat);
  130. }
  131.  
  132. // Update the enable/disabled status of the controls
  133. void CMenuJoystick::UpdateEnable()
  134. {
  135.     // Update the enable/disable status of the controls
  136.     m_pAxisTurn->UpdateEnable(m_bUseJoystick);
  137.     m_pAxisMove->UpdateEnable(m_bUseJoystick);
  138.     m_pAxisLook->UpdateEnable(m_bUseJoystick);
  139.     m_pAxisStrafe->UpdateEnable(m_bUseJoystick);
  140.     m_pAxisStrafe->UpdateEnable(m_bUseJoystick);
  141.     if (m_pUsePovHat != NULL) m_pUsePovHat->Enable(m_bUseJoystick);
  142. }
  143.  
  144.  
  145. // The left key was pressed
  146. void CMenuJoystick::OnLeft()
  147. {
  148.     // Call the base class
  149.     CMenuBase::OnLeft();
  150.  
  151.     UpdateData();
  152.  
  153.     // Update the enable/disable status of the controls
  154.     UpdateEnable();
  155. }
  156.  
  157. // The right key was pressed
  158. void CMenuJoystick::OnRight()
  159. {
  160.     // Call the base class
  161.     CMenuBase::OnRight();
  162.  
  163.     UpdateData();
  164.  
  165.     // Update the enable/disable status of the controls
  166.     UpdateEnable();    
  167. }
  168.  
  169. // Change in focus
  170. void CMenuJoystick::OnFocus(DBOOL bFocus)
  171. {
  172.     if (bFocus)
  173.     {
  174.         // get the hat variable 
  175.         HCONSOLEVAR hVar = m_pClientDE->GetConsoleVar( "UsePovHat");
  176.         if (hVar != NULL) 
  177.         {
  178.             if (m_pClientDE->GetVarValueFloat(hVar) == 1) m_bUsePovHat = DTRUE;
  179.             else m_bUsePovHat = DFALSE;
  180.         }
  181.  
  182.         // Load the menu options from the console    
  183.         m_pAxisTurn->LoadFromConsole(m_pClientDE);
  184.         m_pAxisMove->LoadFromConsole(m_pClientDE);
  185.         m_pAxisLook->LoadFromConsole(m_pClientDE);
  186.         m_pAxisStrafe->LoadFromConsole(m_pClientDE);        
  187.  
  188.         UpdateData(DFALSE);
  189.  
  190.         // Update the enable/disable status of the controls
  191.         UpdateEnable();    
  192.     }
  193.     else        
  194.     {
  195.         char strConsole[512];
  196.  
  197.         UpdateData();
  198.  
  199.         // Save the menu options to the console
  200.         m_pAxisTurn->SaveToConsole(m_pClientDE);
  201.         m_pAxisMove->SaveToConsole(m_pClientDE);
  202.         m_pAxisLook->SaveToConsole(m_pClientDE);
  203.         m_pAxisStrafe->SaveToConsole(m_pClientDE);
  204.  
  205.         // get the name of the joystic device
  206.         char* sDeviceName = m_pAxisTurn->GetDeviceName();
  207.  
  208.         // save the POV console variable
  209.         {
  210.             int nVal;
  211.             if (m_bUsePovHat) nVal = 1;
  212.             else nVal = 0;
  213.             sprintf(strConsole, "+UsePovHat %f", (float)nVal);
  214.             m_pClientDE->RunConsoleString(strConsole);
  215.         }
  216.  
  217.         // write out the POV binding
  218.         if (sDeviceName != NULL)
  219.         {
  220.             if (m_bUsePovHat)
  221.             {
  222.                 sprintf(strConsole, "rangebind \"%s\" \"##POV 0\" 0.0 1000.0 \"LookUp\"  35000.0 36000.0 \"LookUp\" 8000.0 10000.0 \"NextWeapon\" 17000.0 19000.0 \"LookDown\" 26000 28000 \"PrevWeapon\"", sDeviceName);
  223.                 m_pClientDE->RunConsoleString(strConsole);
  224.             }
  225.             else
  226.             {
  227.                 sprintf(strConsole, "rangebind \"%s\" \"##POV 0\" 0 0", sDeviceName);
  228.                 m_pClientDE->RunConsoleString(strConsole);
  229.             }
  230.         }
  231.  
  232.         g_pBloodClientShell->SetUseJoystick(m_bUseJoystick);
  233. /* this code is no longer needed
  234.         if (m_bUseJoystick)
  235.         {
  236.             char strJoystick[128];
  237.             memset (strJoystick, 0, 128);
  238.             DRESULT result = m_pClientDE->GetDeviceName (DEVICETYPE_JOYSTICK, strJoystick, 127);
  239.             if (result == LT_OK) 
  240.             {
  241.                 char strConsole[256];
  242.                 sprintf (strConsole, "EnableDevice \"%s\"", strJoystick);
  243.                 m_pClientDE->RunConsoleString (strConsole);
  244.             }
  245.             else
  246.             {
  247.                 g_pBloodClientShell->SetUseJoystick(FALSE);
  248.             }
  249.         }    
  250. */
  251.     }
  252. }
  253.  
  254.